package com.iphone.xkyy.service.impl;

import com.iphone.xkyy.constant.ConstantUtils;
import com.iphone.xkyy.domain.Msginfo;
import com.iphone.xkyy.input.MsgInput;
import com.iphone.xkyy.mapper.MsginfoMapper;
import com.iphone.xkyy.service.IMsginfoService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author ikun
 * @since 2022-12-08
 */
@Service
public class MsginfoServiceImpl extends ServiceImpl<MsginfoMapper, Msginfo> implements IMsginfoService {

    @Override
    public void addTimingMsgInfo(List<MsgInput> list) {
        list.forEach(msgInfo -> {
            if (msgInfo.getStartTime() == null && msgInfo.getEndTime() == null && StringUtils.isEmpty(msgInfo.getTimeType()) && StringUtils.isEmpty(msgInfo.getPartTime())) {
                msgInfo.setType(ConstantUtils.MSG_TYPE_AUTO);//立即发送
            } else {
                msgInfo.setType(ConstantUtils.MSG_TYPE_TIMER);//定时发送
            }
            if (ConstantUtils.MSG_TIME_TYPE_TODAY.equals(msgInfo.getTimeType())) {
                msgInfo.setTimeType(ConstantUtils.MSG_TIME_TYPE_DAY);
                msgInfo.setMsgSign("1");
            }
            Optional<String> s = checkParam(msgInfo);
            if (s.isPresent()) {
                throw new RuntimeException(s.get());
            }
            if (ConstantUtils.MSG_SEND_PUSH.equals(msgInfo.getPushType())) {//push方式
                if (!StringUtils.isEmpty(msgInfo.getPlatform())) {
                    if (ConstantUtils.MSG_SEND_SHOP.equals(msgInfo.getPlatform())) {//门店
                        msgInfo.setRabbitQueue(ConstantUtils.MSG_STORE_QUEUE);
                    } else if (ConstantUtils.MSG_SEND_ZERO_APP.equals(msgInfo.getPlatform())) {//零道小程序
                        msgInfo.setRabbitQueue(ConstantUtils.MSG_STORE_QUEUE);
                    } else if (ConstantUtils.MSG_SEND_APPLET.equals(msgInfo.getPlatform())) {//小程序
                        msgInfo.setRabbitQueue(ConstantUtils.MSG_APPLET_QUEUE);
                    } else if (ConstantUtils.MSG_SEND_THEPUB.equals(msgInfo.getPlatform())) {//公众号
                        msgInfo.setRabbitQueue(ConstantUtils.MSG_THEPUB_QUEUE);
                    } else if (ConstantUtils.MSG_SEND_NOTIFBAR.equals(msgInfo.getPlatform())) {//通知栏
                        msgInfo.setRabbitQueue(ConstantUtils.MSG_NOTIFBAR_QUEUE);
                    }
                }
            } else if (ConstantUtils.MSG_SEND_DUANX.equals(msgInfo.getPushType())) {//短信
                msgInfo.setRabbitQueue(ConstantUtils.MSG_DUANX_QUEUE);
            }
            Msginfo addMsg = new Msginfo();
            BeanUtils.copyProperties(msgInfo, addMsg);
            UUID msgId = UUID.randomUUID();
            addMsg.setId(msgId);
            addMsg.setCreateTime(new Date());
            //msgInfo.setCreateUser(LgUtil.getMember().getName());
            addMsg.setStatus(ConstantUtils.MSG_SEND_STATUS_W);//待发送
            addMsg.setRabbitStatus(ConstantUtils.MSG_SEND_WAIT);//待发送
            //addMsg.setUserId(LgUtil.getMember().getId());
            insert(addMsg);
        });
    }
    private Optional<String> checkParam(MsgInput msgInfo) {
        if (StringUtils.isEmpty(msgInfo.getPushType())) {
            return Optional.of("发布方式不能为空！");
        }
        if (ConstantUtils.MSG_SEND_PUSH.equals(msgInfo.getPushType()) && StringUtils.isEmpty(msgInfo.getPlatform())) {
            return Optional.of("发布平台不能为空！");
        }
        if (StringUtils.isEmpty(msgInfo.getMsgType())) {
            return Optional.of("通知类型不能为空！");
        }
        if (ConstantUtils.MSG_SEND_DUANX.equals(msgInfo.getPushType()) && StringUtils.isEmpty(msgInfo.getUserPhone())) {//短信
            return Optional.of("短信模式用户手机号不能为空！");
        }
        if (StringUtils.isEmpty(msgInfo.getType())) {//定时、自动
            return Optional.of("消息类型不能为空！");
        }
        if (Arrays.asList(ConstantUtils.MSG_TYPE_ANN_BACK, ConstantUtils.MSG_TYPE_ANN_COMPANY).contains(msgInfo.getMsgType()) && msgInfo.getPushType().equals(ConstantUtils.MSG_SEND_DUANX)) {
            return Optional.of("公告无法通过短信发送！");
        }
        if (msgInfo.getPushType().equals(ConstantUtils.MSG_SEND_PUSH) && StringUtils.isEmpty(msgInfo.getRange())) {
            return Optional.of("发布范围不能为空！");
        }
        if (ConstantUtils.MSG_TYPE_TIMER.equals(msgInfo.getType())) {
            if (msgInfo.getStartTime() == null) {
                return Optional.of("开始时间不能为空！");
            }
            if (msgInfo.getEndTime() == null) {
                return Optional.of("结束时间不能为空！");
            }
            if (StringUtils.isEmpty(msgInfo.getTimeType())) {
                return Optional.of("时间周期不能为空！");
            }
            if (StringUtils.isEmpty(msgInfo.getPartTime())) {
                return Optional.of("具体时间不能为空！");
            }
        }
        return Optional.empty();
    }
}